#ifndef __DIROPT__
#define __DIROPT__

#include <my_header.h>

// ====================== 配置常量 ======================
#define MAX_PATH_LEN PATH_MAX     // 支持长路径
#define MAX_LS_BUFFER 4096   // 大目录支持
#define NET_SAVE_ROOT "/home/muridae/DraftsJ/TestsJ/Private_protocol_file_management_server_projectJ/PPFMSPJ/Tests1J/tmp/safe_root/"

// ====================== 数据结构 ======================
typedef struct PathComponent {                              
    char name[64];
    struct PathComponent *next;
    int path_length;
    struct PathComponent *tail;
} PathComponent;

typedef struct {

    char current_dir[MAX_PATH_LEN];   // 当前工作目录
    char root_dir[MAX_PATH_LEN];      // 沙箱根目录
    int stack_top;                    // 栈顶指针   
    PathComponent *pcn;
    int netfd;
    char recv_path[MAX_PATH_LEN]; 
    char sumPath[MAX_PATH_LEN];
    int opt;

} ClientSession;

//初始化一下
int init_session(ClientSession *session, const char *root);

int handle_path(ClientSession* css);

//弹已经优化好的栈组成路径
int build_path(ClientSession *css);

int sum_path(ClientSession *css);

//辅助函数，验证绝对路径的真实性，存在的话会返回1
int is_path_accessible(ClientSession *css);

int check_dir(ClientSession *css);

int cd_dir(ClientSession * css);

int ls_dir(ClientSession *css);

int pwd_dir(ClientSession *css);

int mk_dir(ClientSession *css);

int rm_dir(ClientSession * css);

int opt_dir(ClientSession *css,int opt,char *recv_path);



#endif
